package com.cnebula.openapi.auth.service;

import com.cnebula.openapi.auth.vo.ClientApp;

import io.vertx.core.Future;
import io.vertx.core.net.SocketAddress;

/**
 * Client App 服务接口
 *
 */
public interface ClientAppService {

	/**
	 * 验证 Client Key的合法性
	 * 
	 * Client Key的合法性包括：
	 * 
	 * 1. 是否过期 
	 * 2. 状态是否合法
	 * 3. 请求服务的IP地址是否合法
	 * 
	 * @param clientKey
	 * @param tenantId
	 * @param clientAddress
	 * 
	 * @return ClientApp 外部应用系统信息
	 *         ClientKeyExpireException client key 已过期
	 *         ClientKeyUNAvailableExceptoin client key 不可用
	 *         ClientAppAddressMismatch client ip不匹配
	 *         ClientAppServiceRequestFail 请求LSP的Client Key 服务时失败
	 */
	public Future<ClientApp> checkKey(String clientKey, String tenantId, SocketAddress clientAddress);
	
	/**
	 * 
	 * @param clientKey
	 * @param tenantId
	 * @return ClientApp 外部应用系统信息
	 *         ClientAppServiceRequestFail 请求LSP的Client Key 服务时失败
	 */
	public Future<ClientApp> getClientApp(String clientKey, String tenantId);
}